﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Data;

namespace CentroVentas.Forms.Venta
{
    /// <summary>
    /// Lógica de interacción para Venta.xaml
    /// </summary>
    public partial class Venta : Page
    {
        DataTable dt;
        List<CVCore32.Class.Funciones.Venta.DetalleCarrito> detalle;
        public Venta()
        {
            InitializeComponent();
            dt = new DataTable();
            txtCantidad.IsEnabled = false;
            // CrearEstructura();
            detalle = new List<CVCore32.Class.Funciones.Venta.DetalleCarrito>();
        }

        private void CrearEstructura()
        {
            dt.Columns.Add("IdProducto", typeof(string)).Caption = "Id Producto";
            dt.Columns.Add("CodBarras", typeof(string)).Caption = "Código de barras";
            dt.Columns.Add("Descripción", typeof(string)).Caption = "Descripción";
            dt.Columns.Add("Precio", typeof(string)).Caption = "Precio";
            dt.Columns.Add("Cantidad", typeof(Int32)).Caption = "Cantidad";
            dt.Columns.Add("Subtotal", typeof(string)).Caption = "Subtotal";

            GrillaVenta.DataContext = dt;
        }

        private int _idProducto = 0;
        private void txtProducto_KeyDown(object sender, KeyEventArgs e)
        {
            if (!String.IsNullOrWhiteSpace(txtProducto.Text))
            {
                if (e.Key == Key.Enter)
                {
                    if (CVCore32.Class.Funciones.Productos.Producto.ExisteProducto(txtProducto.Text))
                    {
                        CVCore32.Data.Producto prod = CVCore32.Class.Funciones.Productos.Producto.getProducto(txtProducto.Text);

                        NombreProducto.Text = prod.Descripcion;
                        txtCantidadDisponible.Text = "/ " + CVCore32.Class.Funciones.Productos.Producto.GetCantidadDisponible(prod.ProductoId).ToString();
                        txtCantidad.IsEnabled = true;
                        _idProducto = prod.ProductoId;
                        txtCantidad.Focus();
                    }
                    else
                    {
                        MessageBox.Show("No existe producto");
                        txtCantidadDisponible.Text = "/ 0";
                        _idProducto = 0;
                        txtCantidad.IsEnabled = false;
                        NombreProducto.Text = "";
                    }
                }
                else if (e.Key == Key.F2)
                {

                }
            }
        }

        private void txtCantidad_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Enter)
            {
                if (!String.IsNullOrWhiteSpace(txtCantidad.Text))
                {
                    if (_idProducto != 0)
                    {
                        if (txtCantidad.Value <= CVCore32.Class.Funciones.Productos.Producto.GetCantidadDisponible(_idProducto))
                        {
                            int cantidadp = (from pr in detalle
                                             where pr.IdProd == _idProducto
                                             select pr.IdProd).Count();
                            if (cantidadp > 0)
                            {
                                foreach (CVCore32.Class.Funciones.Venta.DetalleCarrito dc in detalle.Where(x => x.IdProd == _idProducto))
                                {
                                    dc.Cantidad = Convert.ToInt32(txtCantidad.Value);
                                }
                                GrillaVenta.DataContext = detalle;
                                GrillaVenta.Items.Refresh();                           
                                
                            }
                            else
                            {
                                CVCore32.Data.Producto prod = CVCore32.Class.Funciones.Productos.Producto.getProducto(txtProducto.Text);

                                CVCore32.Class.Funciones.Venta.DetalleCarrito dc = new CVCore32.Class.Funciones.Venta.DetalleCarrito();
                                dc.IdProd = _idProducto;
                                dc.Cantidad = Convert.ToInt32(txtCantidad.Value);
                                dc.CodBarras = prod.CodBarras;
                                dc.Descripcion = prod.Descripcion;
                                CVCore32.Data.Precio prec = CVCore32.Class.Funciones.Productos.Precio.GetPrecio(_idProducto, CVCore32.Class.Funciones.Productos.MetodoDeValoracionDeInventario.PEPS);
                                dc.Precio = Convert.ToDouble(prec.PrecioVenta);

                                detalle.Add(dc);
                                GrillaVenta.Items.Refresh();
                                GrillaVenta.DataContext = detalle;
                            }
                            GetPrecio();
                        }
                        else
                        {
                            MessageBox.Show("La cantidad indicada es mayor al stock actual.");
                            txtCantidad.Value = CVCore32.Class.Funciones.Productos.Producto.GetCantidadDisponible(_idProducto);
                        }
                    }
                }
                else
                {
                    MessageBox.Show("Debe ingresar un valor");
                }
            }
        }


        void GetPrecio()
        {
            Double valor = 0;
            foreach (CVCore32.Class.Funciones.Venta.DetalleCarrito item in detalle)
            {
                valor = valor + item.SubTotal;
            }
            txtPrecio.Text = CVCore32.Class.Core.Currency.formatearMoneda(valor);
        }
    }
}
